all files / datePicker/ datePickerDialog.vue

40.74% Statements 11/27
28.57% Branches 4/14
7.69% Functions 1/13
25% Lines 5/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140  1× 1× 1× 1×                                                                                                                                                                                                                                                                              
 
import {dateTimeFormat} from './dateUtils'
import popover from '../popover'
import dialog from '../dialog'
import calendar from './calendar'
export default {
  props: {
    dateTimeFormat: {
      type: Object,
      default: dateTimeFormat
    },
    autoOk: {
      type: Boolean
    },
    cancelLabel: {
      type: String
    },
    okLabel: {
      type: String
    },
    container: {
      type: String,
      default: 'dialog',
      validator (val) {
        return val && ['dialog', 'inline'].indexOf(val) !== -1
      }
    },
    disableYearSelection: {
      type: Boolean
    },
    firstDayOfWeek: {
      type: Number
    },
    initialDate: {
      type: Date,
      default () {
        return new Date()
      }
    },
    maxDate: {
      type: Date
    },
    minDate: {
      type: Date
    },
    mode: {
      type: String,
      default: 'portrait',
      validator (val) {
        return val && ['portrait', 'landscape'].indexOf(val) !== -1
      }
    },
    shouldDisableDate: {
      type: Function
    }
  },
  data () {
    return {
      open: false,
      showCalendar: false,
      trigger: null
    }
  },
  mounted () {
    this.trigger = this.$el
  },
  methods: {
    handleAccept (date) {
      this.$emit('accept', date)
      this.open = false
    },
    handleDismiss () {
      this.dismiss()
    },
    handleClose (reson) {
      this.dismiss()
    },
    dismiss () {
      this.open = false
      this.$emit('dismiss')
    },
    hideCanlendar () {
      this.showCalendar = false
    }
  },
  watch: {
    open (val) {
      if (val) this.showCalendar = true
    }
  },
  render (h) {
    const Calendar = this.showCalendar ? h(calendar, {
      props: {
        autoOk: this.autoOk,
        dateTimeFormat: this.dateTimeFormat,
        okLabel: this.okLabel,
        cancelLabel: this.cancelLabel,
        disableYearSelection: this.disableYearSelection,
        shouldDisableDate: this.shouldDisableDate,
        firstDayOfWeek: this.firstDayOfWeek,
        initialDate: this.initialDate,
        maxDate: this.maxDate,
        minDate: this.minDate,
        mode: this.mode
      },
      on: {
        accept: this.handleAccept,
        dismiss: this.handleDismiss
      }
    }) : ''
    return h('div', {
      style: {
        // 'margin-top': '-28px'
      }
    }, [
      this.container === 'dialog' ? h(dialog, {
        props: {
          open: this.open,
          dialogClass: ['mu-date-picker-dialog', this.mode]
        },
        on: {
          close: this.handleClose,
          hide: this.hideCanlendar
        }
      }, [Calendar]) : h(popover, {
        props: {
          trigger: this.trigger,
          overlay: false,
          open: this.open
        },
        on: {
          close: this.handleClose,
          hide: this.hideCanlendar
        }
      }, [Calendar])
    ])
  }
}